<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
输入整数数组 arr ，找出其中最小的 k 个数。
例如，输入4、5、1、6、2、7、3、8这8个数字，
则最小的4个数字是1、2、3、4。

示例 1：
输入：arr = [3,2,1], k = 2
输出：[1,2] 或者 [2,1]

示例 2：
输入：arr = [0,1,2,1], k = 1
输出：[0]
 
限制：
0 <= k <= arr.length <= 10000
0 <= arr[i] <= 10000

 -->

    <script>
        /**
         * @param {number[]} arr
         * @param {number} k
         * @return {number[]}
         */
        var arr = [4, 5, 1, 6, 2, 7, 3, 8, 11, 12]
        //  方法一
        //  先排序，后取值
        var getLeastNumbers = function (arr, k) {
            return arr.sort(function (a, b) {
                return a - b
            }).slice(0, k)
        };
        console.log(getLeastNumbers(arr, 4))

        // 方法二
        // 建立一个新数组存储当前循环中的最小值，新数组满了之后最大值跟当前值对比，
        // 最大值小于当前值数组不变，最大值大于当前值则当前值替换最大值
        var arr2 = [4, 5, 1, 6, 2, 7, 3, 8, 11, 12]
        var getLeastNumbers2 = function (arr, k) {
            var result = []
            var l = arr.length
            for (var i = 0; i < l; i++) {
                if (result.length < k) {
                    if (result[result.length - 1]) {
                        if (result[result.length - 1] > arr[i]) {
                            result.splice(0, 0, arr[i])
                        } else {
                            result.push(arr[i])
                        }
                    } else {
                        result.push(arr[i])
                    }
                } else {
                    if (result[result.length - 1] > arr[i]) {
                        result[result.length - 1] = arr[i]
                        result.sort(function (a, b) {
                            return a - b
                        })
                    }
                }
            }
            return result
        }
        console.log(getLeastNumbers2(arr2, 4))
    </script>
</body>

</html>